Flask file uploads
Make sure you create empty static folder for file to upload to.
templates\template.html
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File"> </form>
server.py
from flask import * app = Flask("uploading files to webserver") import os, sys @app.route("/upload", methods=["POST"]) def upload(): file = request.files["fileToUpload"] #to avoid a 'permission error (13)', we find absolute location of this module: disk_location = os.path.dirname(os.path.realpath(sys.argv[0])) save_location = os.path.join(disk_location, "static") file.save(os.path.join(save_location, file.filename)) return redirect("/") @app.route("/") def main(): return render_template("template.html") app.run(debug=True)
The following extensions to this program displays the files uploaded:
1. add browse utility function and modify main route as shown:
# utility function: browse, returns list of files in static folder: def browse(): filelist = [] static_folder = os.path.join(app.root_path,"static") for entry in os.scandir(static_folder): if not entry.name.startswith('.') and not entry.is_dir(): filelist.append(entry.name) return filelist @app.route("/") def main(): files = browse() return render_template("template.html", files=files)
2. add Jinja2 code to template.html to iterate through and display files:
{% if files|length > 1 %} {% for file in files %} <a href="{{ url_for('static', filename=file) }}">{{file}}</a> {% endfor %} {% endif %}